home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / TextParser.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  12KB  |  286 lines

  1. /*
  2.      File:        TextParser.h
  3.  
  4.      Contains:    International Text Parser Interfaces.
  5.  
  6.      Version:    Technology:    System 8
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __TEXTPARSER__
  19. #define __TEXTPARSER__
  20.  
  21. #ifndef __CONDITIONALMACROS__
  22. #include <ConditionalMacros.h>
  23. #endif
  24. #if FOR_SYSTEM8_PREEMPTIVE
  25. #ifndef __TYPES__
  26. #include <Types.h>
  27. #endif
  28. #ifndef __TEXTOBJECTS__
  29. #include <TextObjects.h>
  30. #endif
  31. #ifndef __TEXTCOMMON__
  32. #include <TextCommon.h>
  33. #endif
  34. #ifndef __LOCALEOBJECTS__
  35. #include <LocaleObjects.h>
  36. #endif
  37. #endif
  38.  
  39. #ifdef __cplusplus
  40. extern "C" {
  41. #endif
  42.  
  43. #if PRAGMA_IMPORT_SUPPORTED
  44. #pragma import on
  45. #endif
  46.  
  47. #if PRAGMA_ALIGN_SUPPORTED
  48. #pragma options align=mac68k
  49. #endif
  50.  
  51. #if FOR_SYSTEM8_PREEMPTIVE
  52. #define kParserTableLocaleKeyName            "\pparsetable"
  53. typedef struct OpaqueTTextParseRef* TTextParseRef;
  54. typedef UInt32 ParsingToken;
  55. typedef ParsingToken BasicToken;
  56. typedef ParsingToken RangeToken;
  57. typedef ParsingToken KeywordToken;
  58. typedef ParsingToken MultiChoiceToken;
  59. typedef ParsingToken ComposedToken;
  60. /*defintions for the future*/
  61. typedef ParsingToken RegExpToken;
  62. typedef ParsingToken GrammarRuleToken;
  63. /*definition of Pointers to tokens*/
  64. typedef ParsingToken *ParsingTokenPtr;
  65. typedef ParsingTokenPtr BasicTokenPtr;
  66. typedef ParsingTokenPtr RangeTokenPtr;
  67. typedef ParsingTokenPtr KeywordTokenPtr;
  68. typedef ParsingTokenPtr MultiChoiceTokenPtr;
  69. typedef ParsingTokenPtr ComposedTokenPtr;
  70. typedef OptionBits ParsingOptionBits;
  71. typedef LocaleObjectRef ParserLocaleObjectRef;
  72.  
  73. enum {
  74.                                                                 /*ParsingOptionBits*/
  75.     kParseMainTokenOptionBit    = 0,
  76.     kIsAlphaNumericKeyWordOptionBit = 1,
  77.     kIsCaseSensitiveParsingOptionBit = 2,
  78.     kIsDiacreticSensitiveParsingOptionBit = 3,
  79.     kParseTextEnclosedByLitearlDelimitersOptionBit = 4,
  80.     kIsCommentsAllowedOptionBit    = 5
  81. };
  82.  
  83.  
  84. enum {
  85.                                                                 /*ParsingOptionMask*/
  86.     kStandardParsingOptionsMask    = 0,
  87.     kParseMainTokenOptionMask    = 1L << kParseMainTokenOptionBit,
  88.     kIsAlphaNumericKeyWordOptionMask = 1L << kIsAlphaNumericKeyWordOptionBit,
  89.     kIsCaseSensitiveParsingOptionMask = 1L << kIsCaseSensitiveParsingOptionBit,
  90.     kIsDiacreticSensitiveParsingOptionMask = 1L << kIsDiacreticSensitiveParsingOptionBit,
  91.     kParseTextEnclosedByLitearlDelimitersOptionMask = 1L << kParseTextEnclosedByLitearlDelimitersOptionBit,
  92.     kIsCommentsAllowedOptionMask = 1L << kIsCommentsAllowedOptionBit
  93. };
  94.  
  95. /* Basic Tokens definitions (try to match system 7 tokens when possible*/
  96.  
  97. enum {
  98.     kBasicTokenUnknown            = 0,                            /*characters that don't have token definition*/
  99.     kBasicTokenEscape            = 10,                            /*character escape (e.g. '\' in "\n", "\t")*/
  100.     kBasicTokenLeftParen        = 16,                            /*open parenthesis*/
  101.     kBasicTokenRightParen        = 17,                            /*close parenthesis*/
  102.     kBasicTokenLeftBracket        = 18,                            /*open square bracket*/
  103.     kBasicTokenRightBracket        = 19,                            /*close square bracket*/
  104.     kBasicTokenLeftCurly        = 20,
  105.     kBasicTokenRightCurly        = 21,                            /*close curly bracket*/
  106.     kBasicTokentokenLeftEnclose    = 22,                            /*open guillemet*/
  107.     kBasicTokenRightEnclose        = 23,                            /*close guillemet*/
  108.     kBasicTokenPlus                = 24,
  109.     kBasicTokenMinus            = 25,
  110.     kBasicTokenAsterisk            = 26,                            /*times/multiply*/
  111.     kBasicTokenDivide            = 27,
  112.     kBasicTokenPlusMinus        = 28,                            /*plus or minus symbol*/
  113.     kBasicTokenSlash            = 29,
  114.     kBasicTokenBackSlash        = 30,
  115.     kBasicTokenLess                = 31,                            /*less than symbol*/
  116.     kBasicTokenGreat            = 32,                            /*greater than symbol*/
  117.     kBasicTokenEqual            = 33,
  118.     kBasicTokenLessEqual1        = 35,                            /*less than or equal, 1 character*/
  119.     kBasicTokenGreatEqual1        = 37,                            /*greater than or equal, 1 character*/
  120.     kBasicTokenNotEqual            = 40,                            /*not equal, 1 character*/
  121.     kBasicTokenExclam            = 43,                            /*exclamation point*/
  122.     kBasicTokenTilde            = 44,                            /*centered tilde*/
  123.     kBasicTokenComma            = 45,
  124.     kBasicTokenPeriod            = 46,
  125.     kBasicTokenLeft2Quote        = 47,                            /*open double quote*/
  126.     kBasicTokenRight2Quote        = 48,                            /*close double quote*/
  127.     kBasicTokenLeft1Quote        = 49,                            /*open single quote*/
  128.     kBasicTokenRight1Quote        = 50,                            /*close single quote*/
  129.     kBasicToken2Quote            = 51,                            /*double quote*/
  130.     kBasicToken1Quote            = 52,                            /*single quote*/
  131.     kBasicTokenSemicolon        = 53,
  132.     kBasicTokenPercent            = 54,
  133.     kBasicTokenCaret            = 55,
  134.     kBasicTokenUnderline        = 56,
  135.     kBasicTokenAmpersand        = 57,
  136.     kBasicTokenAtSign            = 58,
  137.     kBasicTokenBar                = 59,                            /*vertical bar*/
  138.     kBasicTokenQuestion            = 60,
  139.     kBasicTokenPi                = 61,                            /*lower-case pi*/
  140.     kBasicTokenRoot                = 62,                            /*square root symbol*/
  141.     kBasicTokenSigma            = 63,                            /*capital sigma*/
  142.     kBasicTokenIntegral            = 64,                            /*integral sign*/
  143.     kBasicTokenMicro            = 65,
  144.     kBasicTokenCapPi            = 66,                            /*capital pi*/
  145.     kBasicTokenInfinity            = 67,
  146.     kBasicTokenColon            = 68,
  147.     kBasicTokenHash                = 69,                            /*e.g. #*/
  148.     kBasicTokenDollar            = 70,
  149.     kBasicTokenNoBreakSpace        = 71,                            /*non-breaking space*/
  150.     kBasicTokenFraction            = 72,
  151.     kBasicTokenIntlCurrency        = 73,
  152.     kBasicTokenLeftSingGuillemet = 74,
  153.     kBasicTokenRightSingGuillemet = 75,
  154.     kBasicTokenPerThousand        = 76,
  155.     kBasicTokenEllipsis            = 77,
  156.     kBasicTokenCenterDot        = 78,
  157.     kBasicTokenSpace            = 128,
  158.     kBasicTokenPasswordChar        = 129
  159. };
  160.  
  161.  
  162. enum {
  163.                                                                 /*predefined composed tokens*/
  164.     kComposedTokenLessEqual2    = 16383,                        /*less than or equal, 2 characters (e.g. <=)*/
  165.     kComposedTokenEqual2        = 16384,                        /*greater than or equal, 2 characters (e.g. >=)*/
  166.     kComposedToken2Equal        = 16385,                        /*double equal (e.g. ==)*/
  167.     kComposedTokenColonEqual    = 16386,                        /*colon equal*/
  168.     kComposedTokenLessGreat        = 16387,                        /*less/greater, Pascal not equal (e.g. <>)*/
  169.     kComposedTokenExclamEqual    = 16388,                        /*exclamation equal, C not equal (e.g. !=)*/
  170.     kComposedTokenNewLine        = 16389                            /*composed may be more than one (10,13)*/
  171. };
  172.  
  173.  
  174. enum {
  175.                                                                 /*predefined multiple choice tokens*/
  176.     kChoiceTokenWhite            = 8192,                            /*white space (CR,LF,space, non break space)*/
  177.     kChoiceTokenLeftLit            = 8193,                            /*literal begin , can be one or more*/
  178.     kChoiceTokenRightLit        = 8194,                            /*literal end, can be one or more*/
  179.     kChoiceTokenAlpha            = 8195,                            /*alphabetic char*/
  180.     kChoiceTokenNumeric            = 8196,                            /*numeric char*/
  181.     kChoiceTokenPunctuationChar    = 8197,                            /*punctuation char*/
  182.     kChoiceTokenRightComment    = 8198,                            /* can be one or more*/
  183.     kChoiceTokenLeftComment        = 8199                            /* can be one or more*/
  184. };
  185.  
  186.  
  187. enum {
  188.                                                                 /*predefined token classes (not overridable for 8.0) mapped to regular expression tokens*/
  189.     kTokenClassIdentifier        = 32768L,                        /*  alphabetic or alphanumeric entities*/
  190.     kTokenClassComment            = 32769L,                        /*    anything inside comment delimiters */
  191.     kTokenClassliteral            = 32770L,                        /*    anything inside literal delimiters */
  192.     kTokenClassIntegerNumber    = 32771L,                        /* text is numeric presentation (integers)*/
  193.     kTokenClassFloatingNumber    = 32772L                        /*text is numeric presentation (float)*/
  194. };
  195.  
  196. struct CharacterRange {                                                                /* structure defining a range of char*/
  197.     UInt32                             theCharRangeBegin;
  198.     UInt32                             theCharRangeEnd;
  199. };
  200. typedef struct CharacterRange CharacterRange;
  201.  
  202. typedef CharacterRange *CharacterRangePtr;
  203. /*============================================================locale object parser APIs====================================================*/
  204. extern OSStatus GetParserObjectByLocaleID(LocaleIdentifier theLocaleIdentifier, TextEncoding theEncoding, ParserLocaleObjectRef *theParserObject);
  205.  
  206. extern OSStatus GetParserObjectByLocaleRef(LocaleRef locale, TextEncoding theEncoding, ParserLocaleObjectRef *theParserObject);
  207.  
  208. extern OSStatus GetCurrentParserObject(ParserLocaleObjectRef *theParserObject);
  209.  
  210. extern OSStatus GetParserObjectInfo(ParserLocaleObjectRef theParserObject, TextEncoding *theEncoding, LocaleIdentifier *theLocaleIdentifier);
  211.  
  212. /*======================================================Iterator creation/modifcation==========================================================*/
  213. extern OSStatus CreateLexicalIterator(ParserLocaleObjectRef localeParserRef, TextObject theTextObject, TextObjectIndex startIndex, TextObjectIndex endIndex, ParsingOptionBits theParsingOptions, TTextParseRef *theParserRef);
  214.  
  215. extern OSStatus LexicalIteratorGetNextToken(TTextParseRef theParser, ParsingToken *theCurrentToken, TextObjectIndex *startIndex, TextObjectIndex *endIndex);
  216.  
  217. extern OSStatus LexicalIteratorSetCommentDelimiters(TTextParseRef refLexicalIterator, ParsingToken tokenLeftDel, ParsingToken tokenRightDel);
  218.  
  219. extern OSStatus LexicalIteratorReset(TTextParseRef refLexicalIterator);
  220.  
  221. extern OSStatus LexicalIteratorSetText(TTextParseRef refLexicalIterator, TextObject theTextObject, TextObjectIndex startIndex, TextObjectIndex endIndex);
  222.  
  223. extern OSStatus LexicalIteratorSetTokenToMatch(TTextParseRef refLexicalIterator, ComposedToken theToken);
  224.  
  225. /*======================================================Tokens Get/Set APIs ==========================================================*/
  226. extern OSStatus LexicalIteratorDefineBasicToken(TTextParseRef refLexicalIterator, UInt32 theChar, BasicToken theToken);
  227.  
  228. extern OSStatus GetUniqueBasicToken(TTextParseRef refLexicalIterator, BasicToken *theToken);
  229.  
  230. extern OSStatus LexicalIteratorDefineKeywordToken(TTextParseRef refLexicalIterator, TextObject theText, TextObjectIndex theStart, TextObjectIndex theEnd, KeywordToken theToken);
  231.  
  232. extern OSStatus GetUniqueKeywordToken(TTextParseRef refLexicalIterator, KeywordToken *theToken);
  233.  
  234. extern OSStatus LexicalIteratorDefineRangeToken(TTextParseRef refLexicalIterator, UInt32 rangeBeginChar, UInt32 rangeEndChar, RangeToken theToken);
  235.  
  236. extern OSStatus GetUniqueRangeToken(TTextParseRef refLexicalIterator, RangeToken *theToken);
  237.  
  238. extern OSStatus LexicalIteratorDefineMultiChoiceToken(TTextParseRef refLexicalIterator, ItemCount nChoices, ParsingToken theChoices[], MultiChoiceToken *theToken);
  239.  
  240. extern OSStatus GetUniqueMultiChoiceToken(TTextParseRef refLexicalIterator, MultiChoiceToken *theToken);
  241.  
  242. extern OSStatus LexicalIteratorDefineComposedToken(TTextParseRef refLexicalIterator, ItemCount nChoices, ParsingToken theChoices[], ComposedToken *theToken);
  243.  
  244. extern OSStatus GetUniqueComposedToken(TTextParseRef refLexicalIterator, ComposedToken *theToken);
  245.  
  246. extern OSStatus GetTextFromToken(TTextParseRef refLexicalIterator, ParsingToken theToken, TextObject TheText);
  247.  
  248. extern OSStatus GetLocaleTextFromToken(ParserLocaleObjectRef localeParserRef, ParsingToken theToken, TextObject TheText);
  249.  
  250. extern OSStatus GetRangeToken(TTextParseRef refLexicalIterator, RangeToken theToken, UInt32 *beginRangeChar, UInt32 *endRangeChar);
  251.  
  252. extern OSStatus GetLocaleRangeToken(ParserLocaleObjectRef localeParserRef, RangeToken theToken, UInt32 *beginRangeChar, UInt32 *endRangeChar);
  253.  
  254. extern OSStatus GetCountTokenChoices(TTextParseRef refLexicalIterator, MultiChoiceToken theToken, ItemCount *nChoices);
  255.  
  256. extern OSStatus GetLocaleCountTokenChoices(ParserLocaleObjectRef localeParserRef, MultiChoiceToken theToken, ItemCount *nChoices);
  257.  
  258. extern OSStatus GetMultiChoiceToken(TTextParseRef refLexicalIterator, MultiChoiceToken theToken, ParsingToken theChoices[]);
  259.  
  260. extern OSStatus GetLocaleMultiChoiceToken(ParserLocaleObjectRef localeParserRef, MultiChoiceToken theToken, ParsingToken theChoices[]);
  261.  
  262. extern OSStatus GetCountTokenComposition(TTextParseRef refLexicalIterator, ComposedToken theToken, ItemCount *nChoices);
  263.  
  264. extern OSStatus GetLocaleCountTokenComposition(ParserLocaleObjectRef localeParserRef, ComposedToken theToken, ItemCount *nChoices);
  265.  
  266. extern OSStatus GetComposedToken(TTextParseRef refLexicalIterator, ComposedToken theToken, ParsingToken theComposition[]);
  267.  
  268. extern OSStatus GetLocaleComposedToken(ParserLocaleObjectRef localeParserRef, ComposedToken theToken, ParsingToken theChoices[]);
  269.  
  270. #endif
  271.  
  272. #if PRAGMA_ALIGN_SUPPORTED
  273. #pragma options align=reset
  274. #endif
  275.  
  276. #if PRAGMA_IMPORT_SUPPORTED
  277. #pragma import off
  278. #endif
  279.  
  280. #ifdef __cplusplus
  281. }
  282. #endif
  283.  
  284. #endif /* __TEXTPARSER__ */
  285.  
  286.